package com.merry.aop.joinpoint;

import org.aopalliance.intercept.Interceptor;

import java.lang.reflect.AccessibleObject;

/**
 * 此接口表示一个通用的 <b>运行时连接点{@code joinpoint} </b>（在AOP术语中）。
 * <b>运行时连接点</b>是在静态连接点（即程序中的某个位置）上发生的事件。例如，调用是方法上的运行时连接点（静态连接点）。给定连接点的静态部分可以使用getStaticPart（）方法进行一般检索。
 * 在拦截框架的上下文中，运行时连接点是对可访问对象（method、constructor、field）的访问的具体化，即连接点的静态部分。它被传递到安装在静态连接点上的拦截器。
 * 它通常与 <b>拦截器{@link Interceptor}</b> 配合使用。
 *
 */
public interface Joinpoint {

    /**
     * 继续执行链中的下一个拦截器。
     * 此方法的实现和语义取决于实际的连接点类型（请参阅子接口）。
     */
    Object proceed() throws Throwable;

    /**
     * 返回包含当前连接点静态部分的对象。
     * 例如，调用的目标对象。
     */
    Object getThis();

    /**
     * 返回此连接点的静态部分。
     * 静态部分是一个可访问的对象，上面安装了一系列拦截器。
     */
    AccessibleObject getStaticPart();

}

